/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ObjetoDominio;

import Excepciones.NoConexionException;
import java.io.IOException;
import java.net.ConnectException;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *Clase que posee la Descripcion del servidor
 * @author familia
 */
public class Servidor {
    
    private String _ip;
    private int _puertoPrincipal;
    private int _puertoSecundario;
    private boolean _activo;

    public boolean isActivo() {
        return _activo;
    }

    public void setActivo(boolean _activo) {
        this._activo = _activo;
    }
            
    public int getPuertoSecundario() {
        return _puertoSecundario;
    }

    public void setPuertoSecundario(int _puertoSecundario) {
        this._puertoSecundario = _puertoSecundario;
    }

    public Socket getViaComunicacionSecundario() {
        return _viaComunicacionSecundario;
    }

    public void setViaComunicacionSecundario(Socket _viaComunicacionSecundario) {
        this._viaComunicacionSecundario = _viaComunicacionSecundario;
    }
    private Socket _viaComunicacion;
    private Socket _viaComunicacionSecundario;

    public Servidor() {
    }

    public void setViaComunicacion(Socket _viaComunicacion) {
        this._viaComunicacion = _viaComunicacion;
    }

    /**
     * Constructor de la clase
     */
    public Servidor(String ip, int puertoPrincipal, int puertoSecundario){
        _ip = ip;
        _puertoPrincipal = puertoPrincipal;
        _puertoSecundario = puertoSecundario;
    }
    
    /**
     * Metodo que abre la conexion con el servidor
     * dado los atributos asignados
     */
    public void AbrirConexion() throws NoConexionException{
        try {
            _viaComunicacion = new Socket(_ip,_puertoPrincipal);
        } catch(ConnectException e){
            _activo = false;
            throw new NoConexionException();
        }catch (UnknownHostException ex) {
            
            System.out.println(ex);
            Logger.getLogger(Servidor.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            
            System.out.println(ex);
            Logger.getLogger(Servidor.class.getName()).log(Level.SEVERE, null, ex);
        }catch (Exception ex) {
            System.out.println(ex);
        }
    }
    
    /**
     * Metodo que abre la conexion con el servidor
     * dado los atributos asignados
     */
    public void AbrirConexionSecundaria() throws NoConexionException{
        try {
            _viaComunicacionSecundario = new Socket(_ip,_puertoSecundario);
        } catch(ConnectException e){
            System.out.println("cerrado servidor " + _ip + " " + _puertoPrincipal + " " + _puertoSecundario);
            _activo = false;
            throw new NoConexionException();
        }catch (UnknownHostException ex) {
            Logger.getLogger(Servidor.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {}
           
    }
    
    /**
     * Metodo que cerra la conexion con el servidor
     */
    public void CerrarConexion(){
        try {
            _viaComunicacion.close();
        } catch (IOException ex) {
            
        }
    }
    
    /**
     * Metodo que cerra la conexion con el servidor
     */
    public void CerrarConexionSecundaria(){
        try {
            _viaComunicacionSecundario.close();
        } catch (IOException ex) {
            
        }
    }
    
    public Socket getViaComunicacion() {
        return _viaComunicacion;
    }    

    public String getIp() {
        return _ip;
    }

    public void setIp(String _ip) {
        this._ip = _ip;
    }

    public int getPuerto() {
        return _puertoPrincipal;
    }

    public void setPuerto(int _puerto) {
        this._puertoPrincipal = _puerto;
    }
}
